package flst.ipiweb.persistance.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import flst.ipiweb.persistance.dao.IModeDePaiementDao;
import flst.ipiweb.transverse.IPIException;
import flst.ipiweb.transverse.ModeDePaiement;

public class ModeDePaiementDaoJdbc implements IModeDePaiementDao{
	
	private JdbcUtils jdbcUtils = JdbcUtils.getInstance();

	@Override
	/**
	 * Cette méthode permet de récupérer la liste des modes de paiement en base
	 * @return List<ModeDePaiement> : la liste des modes de paiement
	 */
	public List<ModeDePaiement> listerModeDePaiement() throws IPIException{
		
		List<ModeDePaiement> listeModeDePaiement = new ArrayList<ModeDePaiement>();
		
		try
		{
			Connection vConnection = jdbcUtils.getConnection();
			Statement vStmt = vConnection.createStatement();
			
			String vRequeteSelect = "SELECT * FROM IPII_SHIPPING_MODES";
			vStmt.execute(vRequeteSelect);
			ResultSet vRs = vStmt.getResultSet();
			while(vRs.next()){
				ModeDePaiement modeDePaiement = new ModeDePaiement();
				//SHIPPING_MODE_ID
				modeDePaiement.setIdModePaiement(vRs.getInt("SHIPPING_MODE_ID"));
				//SHIPPING_MODE_CODE
				modeDePaiement.setLibelle(vRs.getString("SHIPPING_MODE_CODE"));
				//NORMAL_COSTUMER_ACCESS
				Boolean access = new Boolean(false);
				if(vRs.getInt("NORMAL_COSTUMER_ACCESS") == 1)
				{
					access = true;
				}
				else
				{
					access = false;
				}
				modeDePaiement.setAccesClientClassique(access);
				//SUPER_COSTUMER_ACCESS
				if(vRs.getInt("SUPER_COSTUMER_ACCESS") == 1)
				{
					access = true;
				}
				else
				{
					access = false;
				}
				modeDePaiement.setAccesSuperClient(access);

				listeModeDePaiement.add(modeDePaiement);
			}
			
			vStmt.close();
			vConnection.close();
		}
		catch(Exception e)
		{
			throw new IPIException("Exception.doa.technique");
		}
		return listeModeDePaiement;
	}

	@Override
	/**
	 * Cette méthode permet de mettre à jour une mode de paiement en base
	 * @param modeDePaiement : le mode de paiement à mettre à jour
	 * @return ModeDePaiement : le mode de paiement mis à jour
	 */
	public ModeDePaiement updateModeDePaiement(ModeDePaiement modeDePaiement) throws IPIException{
		
		try
		{
			Connection vConnection = jdbcUtils.getConnection();
			String vRequeteInsert = "UPDATE IPII_SHIPPING_MODES SET NORMAL_COSTUMER_ACCESS=?, SUPER_COSTUMER_ACCESS=? WHERE SHIPPING_MODE_ID=?";
			PreparedStatement vPs =	vConnection.prepareStatement(vRequeteInsert) ;
			//NORMAL_COSTUMER_ACCESS
			int access = 0;
			if(modeDePaiement.getAccesClientClassique() == true)
			{
				access = 1;
			}
			vPs.setInt(1, access);
			//SUPER_COSTUMER_ACCESS
			access = 0;
			if(modeDePaiement.getAccesSuperClient() == true)
			{
				access = 1;
			}
			vPs.setInt(2, access);
						
			//mode_id
			vPs.setInt(3, modeDePaiement.getIdModePaiement());

			vPs.executeUpdate();
			
			vPs.close();
			vConnection.close();
		}
		catch (Exception e) {
			throw new IPIException("ModeDePaiementException.update.technique");
		}
		return modeDePaiement;
	}
}
